package com.demo.seckill.common.dynamicquery;

import java.util.List;

/**
 * @author libo
 * @ClassName DynamicQuery
 * @Description: 扩展SpringDataJpa,支持动态的jpql/nativesql查询并支持分页查询
 * @date 2018/11/30 16:06
 */
public interface DynamicQuery {
     void save(Object entity);

     void update(Object entity);

    <T> void delete(Class<T> entityClass,Object entiryId);

    <T> void delete(Class<T>entityClass, Object[] entityids);

    /***
     * @Author libo
     * @Description 查询对象列表,返回List
     * @Date 16:38 2018/11/30
     * @return java.util.List<T>
     */
    <T> List<T> nativeQueryList(String nativeSql, Object...params);

    /***
     * @Author libo
     * @Description //查询对象列表，返回List<Map<key,value>>
     * @Date 16:39 2018/11/30
     * @return java.util.List<T>
     */
    <T> List<T> nativeQueryListMap(String nativeSql,Object... params);

    /***
     * @Author libo
     * @Description //查询对象列表，返回List<组合对象>
     * @Date 16:40 2018/11/30
     * @return java.util.List<T>
     */
    <T> List<T> nativeQueryListModel(Class<T> resultClass,String nativeSql,Object...params);

    /**
     * 执行nativeSql统计查询
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return 统计条数
     */
    Object nativeQueryObject(String nativeSql, Object... params);
    /**
     * 执行nativeSql统计查询
     * @param nativeSql
     * @param params 占位符参数(例如?1)绑定的参数值
     * @return 统计条数
     */
    Object nativeQueryArray(String nativeSql, Object... params);

    /**
     * 执行nativeSql的update,delete操作
     * @param nativeSql
     * @param params
     * @return
     */
    int nativeExecuteUpdate(String nativeSql, Object... params);

}
